﻿import axios from 'axios'
import {confirmLayx, layxMessage} from "@/utils/layxUtil";
import errorCode from "@/utils/errorCode";
// import { Notification, MessageBox, Message } from 'element-ui'
// import store from '@/store'
// import { getToken } from '@/utils/auth'
// import errorCode from '@/utils/errorCode'

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    // baseURL: process.env.VUE_APP_BASE_API,
    // axios发送的路径（请求路径）
    baseURL: process.env.VUE_APP_BASE_URL,
    // 超时
    timeout: 10000
})
// request拦截器
service.interceptors.request.use(config => {
  // 在需要用户登录后的操作，在请求的url中加入加入token
  //   判断访问服务器的url地址，   需要提供身份信息，加入token


    let storageToken = window.localStorage.getItem('token')
    let userinfo = window.localStorage.getItem('userinfo')
    if (storageToken && userinfo){
        // 添加需要token验证的请求路径
        if (config.url == '/user/realName'||
        config.url == '/user/usercenter'  ||
            config.url == '/recharge/records' ||
            config.url == '/invest/records'  ||
            config.url == '/income/records'  ||
            config.url == '/invest/product'
        ){
        //     在header中传递token 和一个userId
        //       由于是jwt生成的token，所以需要加上Bearer
            config.headers['Authorization'] = 'Bearer ' + storageToken
            config.headers['uid'] = JSON.parse(userinfo).uid
        }
    }
  return config
}, error => {
  console.log('请求错误'+error)
  Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
        console.log('统一打印所有请求的res-----', res)
        // 未设置状态码则默认成功状态
        const code = res.data.code || 200
        // 获取错误信息
        const msg = errorCode[code] || res.data.msg || errorCode['default']
        if (code === 401) {
            // 使用自定义的 confirmLayx 函数
            confirmLayx('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', function (confirmed) {
                    if (confirmed) {
                        // 用户选择了重新登录
                        console.log('用户选择重新登录');
                    } else {
                        // 用户选择了取消
                        console.log('用户选择取消');
                    }
                }
            ).then(() => {
                // store.dispatch('FedLogOut').then(() => {
                //   location.href = '/index'
                // })
            }).catch(() => {
            })
            return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
        } else if (code === 500) {

            layxMessage.error(msg)
            return Promise.reject(new Error(msg))
        // } else if (code !== 200) {
        //     Notification.error({
        //         title: msg
        //     })
        //     return Promise.reject('error')
        } else if (code == 3000){
            //token无效，重新登录
            layxMessage.warning(msg+',请先登录')
            window.location.href = '/page/user/login';

        }else if (code >1002){
          //   这里你可以在每个请求的地方单独处理，比较有灵活性
          layxMessage.warning(msg)
        } else {
            // 把字符串total 转换成 数字 total
            if (res.data.data && res.data.data.total) {
                res.data.data.total = parseInt(res.data.data.total)
            }
            return res.data
        }
    },
    error => {
        console.log('err' + error)
        let {message} = error
        if (message === 'Network Error') {
            message = '后端接口连接异常'
        } else if (message.includes('timeout')) {
            message = '系统接口请求超时'
        } else if (message.includes('Request failed with status code')) {
            message = '系统接口' + message.substr(message.length - 3) + '异常'
        }

        layxMessage.error(message)
        return Promise.reject(error)
    }
)


export default service
